# -*- coding:utf-8 -*-

# @Time    : 2023/6/5 11:03
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
import asyncio

from bot.insurance_planner_gpt.agent.base_agent import LLMAgent

default_template = """
作为一个专业{role},你需要根据当前的对话记录总结当前的用户问题列表，用户问题包括用户的疑议或选择保险的偏好，如（保险规划、保险规划保额怎么算的等），多个用户问题之间用"\n"换行符分隔。
需要注意的是：
1.对于用户没有明确表达的问题，你需要根据用户的对话记录进行判断，不要无中生有
2.在输出用户问题时同时考虑历史的用户问题，如果历史用户问题有变化则更新，否则只根据最新对话补充下新的用户问题，最新的用户问题请加上（当下关注）作为标识，最终输出所有的用户问题，多个用户问题使用"\n"换行符分隔。
3.用户问题列表里所有能代表和选择保险相关的问题，都属于偏好，比如要意外险、要免赔额低、要续保、要能报销门诊等，需要在问题后边加上（偏好）

下面的'==='后是对话记录，根据整体对话来进行总结用户的问题。

{user_question_cache}
===
{conversation_history}
===

用户问题列表是：
"""


class QuestioningDisputeResolution(LLMAgent):
    """用户问题及疑议判断机器人"""

    def __init__(self, role, conversation_history, user_question_cache):
        if user_question_cache:
            self.user_question_cache = "历史的用户问题为：\n" + str(user_question_cache) + ";"
        else:
            self.user_question_cache = ""
        self.prompt = default_template.format(role=role, conversation_history=conversation_history.strip().replace('\n\n', '\n'),
                                              user_question_cache=self.user_question_cache.replace("（当下关注）", ""))
        super().__init__(self.prompt)


if __name__ == '__main__':
    conversation_history = """
犀心小助:嘿嘿，您好呀！🌟 我是您的保险小伙伴犀心小助，今天天气怎么样？希望您心情如晴朗的天空一样舒畅哦！需要我帮您规划保险方面的事儿吗？或者有啥保险问题想要咨询的呢？😊🌈  
用户:我需要寿险  
犀心小助:关于寿险，我这里有个不错的选择哦，比如华贵大麦甜蜜家2023定期寿险，这是一款互联网专属的保险产品。定期寿险就是在保障期限内，如果被保险人身故，保险公司将给付约定的保险金。  
咱们接下来需要讨论两个重要的点：保障期限和保额。保障期限就是您想要保障的年限，通常有10年、20年或30年等选项。保额则是指您希望在身故时能给家人的经济补偿。🌟  
请问您有考虑过您的保障期限和预期的保额是多少吗？这样我可以更精准地为您做一个预算的估算。😊📝  
用户:每年1200保费  
犀心小助:明白您的预算了，那我们就围绕这个预算来规划保障期限和保额。🤔  
您更倾向于哪个保障期限呢？是想要的保障时间比较长一些，比如30年，还是短些的，比如10年？同时，您希望建立的保额预期是多少呢？🌈📊  
这两个因素将直接影响保费，我会根据您的选择来帮您计算一个更精确的预算。  
用户:我倾向于30年的保障期限  
犀心小助:好的，30年的保障期限收到啦！✨ 那么接下来我们来讨论一下保额的问题。保额决定了如果被保险人身故，给家人的经济补偿数额。一般来说，寿险的保额可以考虑到孩子的教育费用、家庭负债、以及对家人的未来生活保障等方面。😊  
根据您每年1200元的预算，我们可以先估算一个大致的保额范围。在30年的保障期限下，华贵大麦甜蜜家2023定期寿险的年保费大约是300元，保额可以达到50万左右。  
我想确认一下，您是否有具体的保额数额期望？比如您想为家人提供多少年的生活费用或者孩子的教育储备？这样我可以帮您计算出一个更适合您的保额。📊📝  
用户:保额40万  
犀心小助:好的，保额40万明白啦！👍 根据30年的保障期限以及每年1200元的预算，我们可以为您规划华贵大麦甜蜜家2023定期寿险。   
参考您的需求，如果选择这款产品，您将能得到一份保额为40万的保障，年保费估计在300元左右。这样您的年保费预算1200元就足够支付这份保险的费用啦，并且还有余额可以考虑其他保障需求或者积累储蓄。😄🎉  
如何，我们确定这份保额为40万的寿险方案，然后继续讨论下一步呢？📑🌟  
用户:好  
犀心小助:太棒了！我们已经确定了华贵大麦甜蜜家2023定期寿险产品，30年保障期限，预计年保费在300元左右，保额为40万，符合您的预算。✨  
那么，接下来我们是否还需要考虑其他类型的保险，比如重疾险、医疗险或意外险，为您提供更全面的保障呢？还是有其他方面的疑问或需求需要我帮助解答的呢？🤗🌷  
用户:华贵大麦甜蜜家2023定期寿险产品 投保有条件吗  
犀心小助:好的，关于华贵大麦甜蜜家2023定期寿险的投保条件，下面我给您详细介绍一下：  
1. 投保人年龄：如果您是男性，年龄应在22至60周岁之间；如果是女性，应在20至60周岁之间。如果涉及两个被保险人，他们的年龄差不能超过20岁。  
2. 职业要求：这款产品适合1-6类职业的人群，所以大多数职业都是可以的哦。  
3. 等待期与犹豫期：投保后前90天是等待期，这段时间内发生的非保险责任事故不予赔付。另外，从保单生效后有20天的犹豫期，如果您对保单不满意，可以全额退款。  
4. 保额限制：具体取决于您的职业和身体质量指数（BMI），比如成年学生和家庭主妇的最高保额是100万，退休人员和无业人员的最高保额是30万。BMI超过或低于一定范围的，或者累计保额超过200万且BMI大于30的，可能不会被承保。夫妻双方保额必须相同。  
5. 基本保额：您可以根据需要选择从10万元到300万元不等的基本保额。  
6. 缴费类型：可以选择一次性或年交的方式来支付保费。  
7. 拆分选择权：在未发生保险金给付且剩余保险期间不少于五年时可以申请拆分合同。  
8. 退保损失：在犹豫期内退保，公司退还已支付的保险费扣除工本费；过了犹豫期，退保的话则退合同的现金价值。  
以上就是华贵大麦甜蜜家2023定期寿险的一些主要投保条件，建议您根据这些条件检查一下自己是否符合，然后再决定是否继续投保。如果您有其他问题或需要进一步咨询，请随时告诉我哦！🤗🌟  
用户:犹豫期是什么意思  
犀心小助:犹豫期是指保单生效后的前20天内，如果您对保单的内容觉得不合适或不满意，是可以选择解除合同的。这段时间内，您可以退还全部已经支付的保险费，保险公司一般会扣除一些必要的工本费用。这段时间就像是一个缓冲期，让您有更多时间来思考和决定是否继续保持这份保险。😊   
简单来说，就是给您一个“反悔”的机会，让您有一个全额退款的选项。如果在这个犹豫期结束后才选择退保，可能只能拿回一部分钱，因为那时您会按照保单的现金价值来退保，通常会比您实际支付的保险费要少。希望这样的解释，能让您对犹豫期有个清晰的理解哦！🌟📘🔍  
用户:有什么服务吗  
犀心小助:华贵大麦甜蜜家2023定期寿险提供了一系列的服务来确保您有更好的保险体验。主要服务包括：  
1. 解答疑问服务：如果您对这款寿险的保险产品有任何疑问，比如想了解保险条款或者权益，保险公司都会有专业的客服为您详细解答，帮您更好地理解保险内容。  
2. 投保咨询服务：在投保过程中如有任何不清楚的环节或者需要具体指导，保险公司会提供详细的咨询服务，确保您能够顺利完成投保程序。  
3. 理赔服务：如果被保险人遇到保险责任范围内的问题，需要申请理赔时，保险公司会协助您处理相关事宜，确保您能够及时得到应有的保险金。  
4. 合同变更服务：如果在保险合同有效期内，您有拆分合同、减保等需求，保险公司会提供相应的变更服务，让您的保险合同更加贴合您的实际需求。  
除此之外，您还可以享受犹豫期权益，允许您在保单生效后20天内全额退还已支付的保险费。而且，如果未发生保险金给付且剩余保险期间不少于五年时，您还有选择拆分合同的权利。  
以上就是华贵大麦甜蜜家2023定期寿险的一些主要服务内容，希望对您了解这款产品有所帮助！如果还有其他问题或者需求，欢迎您随时提出哦！😄🌟  
用户:没按期交保费最多能延迟多久？
    """
    user_question = QuestioningDisputeResolution(role='保险规划师',
                                                 conversation_history=conversation_history,
                                                 user_question_cache="""保险规划_个人保险规划需求""")
    user_question_list = asyncio.run(user_question.achat_auto_llm(type="gpt"))
    print(user_question_list)
